package main

import (
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"

	"gitee.com/gldmmhh/bbs/config"
	"gitee.com/gldmmhh/bbs/data_access"
	"gitee.com/gldmmhh/bbs/service"
)

func main() {
	// 加载配置文件
	log.Println("正在加载配置文件...")
	cfg, err := config.LoadConfig("config.yaml")
	if err != nil {
		log.Fatalf("加载配置文件失败: %v", err)
	}
	log.Printf("配置文件加载成功 - %s v%s (%s)", cfg.App.Name, cfg.App.Version, cfg.App.Environment)

	// 初始化数据库
	log.Println("正在初始化MySQL数据库...")
	err = data_access.InitDB(cfg.Database.Host, cfg.Database.Port, cfg.Database.Username, cfg.Database.Password, cfg.Database.Name)
	if err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}
	log.Println("MySQL数据库初始化成功")

	// 启动RPC服务器（在goroutine中）
	go func() {
		log.Println("正在启动用户RPC服务...")
		service.StartUserRPCServer(cfg.Services.UserRPCPort, cfg)
	}()

	go func() {
		log.Println("正在启动帖子RPC服务...")
		service.StartPostRPCServer(cfg.Services.PostRPCPort, cfg)
	}()

	// 等待RPC服务启动
	time.Sleep(time.Duration(cfg.App.StartupDelay) * time.Second)

	// 设置优雅关闭
	c := make(chan os.Signal, 1)
	signal.Notify(c, os.Interrupt, syscall.SIGTERM)

	log.Printf("%s RPC服务已启动，按 Ctrl+C 退出", cfg.App.Name)
	log.Println("RPC服务地址:")
	log.Printf("  用户RPC: %s", cfg.ServiceAddresses.UserRPC)
	log.Printf("  帖子RPC: %s", cfg.ServiceAddresses.PostRPC)

	// 等待退出信号
	<-c
	log.Println("正在关闭RPC服务...")
	log.Println("RPC服务已关闭")
}
